const app = require("express")(); // 创建服务
const http = require("http").Server(app); // 启动一个nodejs服务
const io = require("socket.io")(http);
var users = []; // 记录已经登录过的用户信息

http.listen(3000, () => {
  console.log("服务启动成功");
});

// express处理静态资源
// 把public目录设置为静态资源目录
app.use(require("express").static("public"));

app.get("/", (req, res) => {
  //   res.sendFile(__dirname + '/index.html');//访问首页定向到html去
  res.redirect("/index.html");
});

io.on("connection", (socket) => {
  console.log("新用户连接");
  //    socket.emit方法表示触发某事件，给浏览器发送数据
  //   参数1：事件的名字 /* socket.on 表示注册某事件 */

  //  给浏览器发数据参数1：事件名， 参数2：
  //  socket.emit('send',{name:'123'}) // 发送数据给浏览器，html 需要定义send事件

  /* 浏览器登录事件 */
  socket.on("login", (data) => {
    console.log(data);

    // 判断： 如果data再user中存在则已经登录，不许再登
    // 如果不存在则允许登录
    let user = users.find((item) => item.username === data.username);
    if (user) {
      //表示用户存在，登录失败，服务端返回响应
      socket.emit("loginError", { msg: "登录失败" });
      //   console.log("登录失败");
    } else {
      // 表示用户不存在，登录成功
      users.push(data); // 存数据
      // 告诉用户端登录成功
      socket.emit("loginSuccess", /* { msg: "登录成功" } */ data);
      //   console.log('登录成功')

      /* 广播告诉所有用户有人加入 */
      // socket.emit:告诉当前用户
      // io.emit:广播事件
      io.emit("addUser", data);

      /* 广播告诉所有用户 目前聊天室里有多少人 */
      io.emit("userList", users);

      // 把登录成功的用户名和头像存储起来
      socket.username = data.username;
      socket.avatar = data.avatar;
    }
  });

  /*  socket.on('hhh',data => {
    console.log(data)
    // 将data发回浏览器
    socket.emit('send',data) // 给浏览器发消息
  }) */

  // 用户断开连接
  socket.on("disconnect", () => {
    // 把当前用户的信息从users中删除
    let idx = users.findIndex((item) => item.username === socket.username);
    users.splice(idx, 1);
    // 1.广播所有人有人离开聊天室
    io.emit("delUser", {
      username: socket.username,
      avatar: socket.avatar,
    });
    // 2.广播所有人userList更新
    io.emit("userList", users);
  });
  /* 发送消息 */
  socket.on("sendMessage", (data) => {
    console.log(data);
    //广播给所有用户
    io.emit("receiveMessage",data);
  });
  /* 接收图片消息 */
  socket.on("sendImage", (data) => {
    console.log(data);
    //广播给所有用户
    io.emit("receiveImage",data);
  });
});
